www.gusucode.com > LTE基带收发仿真系统matlab源码程序 > LTE baseband simulation/layer_mapping.m

    function layerSymb = layer_mapping(modSymbCell,nCW,nLayer,preProcess)
% 功能:层映射 将每个码字上复值调制符号映射带一个或多个层上
% 输入:modSymbCell:复值调制符号 nLayer:层数 
%       preProcess:预处理模式,singleAnt,tranmitDiversity, spatialMultiplexing
% 输出:layerSymb:层上的复值符号
% % 
%  Author:		程式小组(徐萌 张妙 张晓庆)
%  Date:		2010-07-11
%  ==========================================================
% 单天线传输,层映射符号和调制后符号一致
if strcmp(preProcess,'singleAnt')
    layerSymb = modSymbCell{1};
    
% 传输分集下,层映射方式
elseif strcmp(preProcess,'tranmitDiversity')
   if nLayer == 2
       len = length(modSymbCell{1});
       layerSymb = zeros(nLayer,len/2);
       layerSymb(1,:) = modSymbCell{1}(1:2:end-1);
       layerSymb(2,:) = modSymbCell{1}(2:2:end-0);
   elseif nLayer == 4
       % 如果码字个数不是4的整数倍,则在末尾添加2个0 码字数必为偶数
       len = length(modSymbCell{1});
       if mod(len,4)~=0
           modSymbCell{1} = cat(2,modSymbCell{1},[0 0]);
           len = len+2;
       end
       M_LYAER_SYMB = len/4;
       layerSymb = zeros(nLayer,M_LYAER_SYMB);
       layerSymb(1,:) = modSymbCell{1}(1:4:end-3);
       layerSymb(2,:) = modSymbCell{1}(2:4:end-2);
       layerSymb(3,:) = modSymbCell{1}(3:4:end-1);
       layerSymb(4,:) = modSymbCell{1}(4:4:end-0);
   end
   
% 空间复用下,层映射方式
elseif strcmp(preProcess,'spatialMultiplexing')
    if nCW == 1 && nLayer == 1
        layerSymb = modSymbCell{1};
    elseif nCW == 2 && nLayer == 2
        len = length(modSymbCell{1});
        layerSymb = zeros(nLayer,len);
        layerSymb(1,:) = modSymbCell{1};
        layerSymb(2,:) = modSymbCell{2};
        
    elseif nCW == 1 && nLayer == 2
        len = length(modSymbCell{1});
        layerSymb = zeros(nLayer,len/2);
        layerSymb(1,:) = modSymbCell{1}(1:2:end-1);
        layerSymb(2,:) = modSymbCell{1}(2:2:end-0);
        
    elseif nCW == 2 && nLayer == 3
        len = length(modSymbCell{1});
        layerSymb = zeros(nLayer,len);
        layerSymb(1,:) = modSymbCell{1};
        layerSymb(2,:) = modSymbCell{2}(1:2:end-1);
        layerSymb(3,:) = modSymbCell{2}(2:2:end-0);
        
    elseif nCW == 2 && nLayer == 4
        len = length(modSymbCell{1});
        layerSymb = zeros(nLayer,len/2);
        layerSymb(1,:) = modSymbCell{1}(1:2:end-1);
        layerSymb(2,:) = modSymbCell{1}(2:2:end-0);
        layerSymb(3,:) = modSymbCell{2}(1:2:end-1);
        layerSymb(4,:) = modSymbCell{2}(2:2:end-0);
        
    end
end